package com.ys.polymorphic;

/**
 * 描述:
 *  1多态情况下操作成员变量特点 :
 *  编译时检查"编译时类型" ---- 查看"编译时类型"中是否包含该成员变量
 *  运行时检查"编译时类型"----- 也就是操作"编译时类型"中的成员变量
 *  总结: 编译和执行都检查"编译时类型"
 *  2: 多态情况下操作成员方法的特点
 *  编译时检查"编译时类型",---查看"编译时类型" 中是否包含该成员方法
 *  运行时检查"运行时类型",---也就是调用"运行时类型"中的成员方法
 *  总结: 编译时检查"编译时类型",运行时检查"运行时类型"
 *
 * @author CodeYang
 * @version 2020/12/16 19:40
 */
public class Test {


    public static void main(String[] args) {
        // 编译时类型   运行时类型
        // 多态,父类引用指向子类对象
        Tom  obj = new AtoTom();
        /*多态角度操作成员变量----基本不用,因为大多数成员变量都是使用private修饰,不可被继承使用*/
       // obj.name = "20";
        // 这里 obj 时AtoTom  并没有name 这个成员变量--(没有用private修饰情况下)
       // System.out.println(obj.name); //----> 20
        /*多态角度下操作成员方法----经常使用*/
        // 请问这里调用 obj.show(); 输出谁的 name
        // 这里编译时 时检查 Tom 类里有没有 show 方法
        // 运行时 检查 实例化对象的 有没有show() 方法
        // 答:---执行 AtoTom 中的 show
        obj.show();


    }
}
